﻿using System;

namespace MugenInjection.Infrastructure
{
    #region Enum: BindingPriority

    /// <summary>
    /// Binding priority enum.
    /// </summary>
    public enum BindingPriority : byte
    {
        /// <summary>
        /// Standard priority = 1.
        /// </summary>
        Standard = 1,

        /// <summary>
        /// Low priority = 2.
        /// </summary>
        Low = 2,

        /// <summary>
        /// Normal priority = 3.
        /// </summary>
        Normal = 3,

        /// <summary>
        /// High prioriy = 4.
        /// </summary>
        High = 4
    }

    #endregion

    #region Enum: ServiceType

    /// <summary>
    /// Contains information about the type of service.
    /// </summary>
    [Flags]
    public enum ServiceType : byte
    {
        /// <summary>
        /// Indicates that the type of object is simple.
        /// </summary>
        Simple = 1,

        /// <summary>
        /// Indicates that the type of object is complex.
        /// </summary>
        Complex = 2,

        /// <summary>
        /// Indicates that the type of object is activatable this means that the object will activated in container.
        /// </summary>
        Activatable = 4,

        /// <summary>
        /// Indicates that the type of object is resolvable this means that the object can be taken out of the container without using a converter.
        /// </summary>
        Resolvable = 8

        /*/// <summary>
        /// Indicates that the type of object is simple.
        /// </summary>
        Simple = 1,

        /// <summary>
        /// Indicates that the type of object is simple but use custom activation.
        /// </summary>
        SimpleWithActivation = 2,

        /// <summary>
        /// Indicates that the type of object is complex.
        /// </summary>
        Complex = 4,

        /// <summary>
        /// Indicates that the type of object is complex but use custom activation.
        /// </summary>
        ComplexWithActivation = 8*/
    }

    #endregion

    #region Enum: TypeChangedAction

    /// <summary>
    /// Contains information about the type changed action.
    /// </summary>
    public enum TypeChangedAction : byte
    {
        /// <summary>
        /// Add action.
        /// </summary>
        Add = 1,
        /// <summary>
        /// Remove action.
        /// </summary>
        Remove = 2
    }

    #endregion

    #region Enum: ConverterResult

    /// <summary>
    /// Represents the converter result.
    /// </summary>
    public enum ConverterResult : byte
    {
        /// <summary>
        /// Not supported type.
        /// </summary>
        NotSupported = 1,

        /// <summary>
        /// Supported type and can be cached.
        /// </summary>
        SupportedWithCache = 2,

        /// <summary>
        /// Supported type and cannot be cached.
        /// </summary>
        SupportedWithoutCache = 4
    }

    #endregion

    #region Enum: ActivateType

    /// <summary>
    /// Type of activate enum.
    /// </summary>
    public enum ActivateType : byte
    {
        OneInstance = 1,
        AllUseType = 2,
        AllUseBindingContext = 3
    }

    #endregion

}